package com.zc58s.concurrent.spring.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * 1、@Before：           前置增强，在某个JoinPoint执行前的增强
 * 2、@After：            final增强，不管抛异常还是正常退出都执行的增强
 * 3、@AfterReturning：   后置增强，方法正常退出时执行
 * 4、@AfterThrowing：    异常抛出增强，抛出异常后执行
 * 5、@Around：           环绕增强，包围一个连接点的增强，最强大的一个方式，且常用
 */
@Aspect
@Component
public class MyAspect {

    @Before("execution(public void com.zc58s.concurrent.spring.service.UserService.test())")
    public void doBefore(JoinPoint point) {
        System.out.println("MyAspect.doBefore");
    }

    @After("execution(public void com.zc58s.concurrent.spring.service.UserService.test())")
    public void doAfter(JoinPoint point) {
        System.out.println("MyAspect.doAfter");
    }
}
